/**
 * 枚举状态复合类型
 */
type SateEnum =
  | ActivitySateEnum
  | UserStateEnum
  | HouseStateEnum
  | MaintenanceStateEnum
  | OrdersStateEnum
  | ContractStateEnum
  | BillSateEnum
  | PaymentMethodsEnum
  | BookingStateEnum
  | CardRollsStateEnum
  | CardRollsTypeEnum

/**
 * 合同确认内容类型
 */
enum ContractConfirmTypeEnum {
  /**
   * 合同资产
   */
  ASSET = '合同资产',
  /**
   * 合同重要确认内容
   */
  IMPORTANT = '合同重要内容',
}

/**
 * 预约状态
 */
enum BookingStateEnum {
  /**
   * 已提交
   */
  SUBMIT = '已提交',
  /**
   * 已完成
   */
  FINISH = '已完成',
  /**
   * 已受理
   */
  ACCEPT = '已受理',
  /**
   * 已失败
   */
  FAIL = '已失败',
  /**
   * 已取消
   */
  CANCEL = '已取消',
}

/**
 * 公共状态
 */
enum CommonSateEnum {
  /**
   * 可用
   */
  YES = 1,
  /**
   * 不可用
   */
  NOT = 0,
}

/**
 * 活动状态
 */
enum ActivitySateEnum {
  /**
   * 活动未开始
   */
  DIDNT_START = '未开始',
  /**
   * 活动进行中
   */
  CARRY_OUT = '进行中',
  /**
   * 活动已结束
   */
  ENDED = '已结束',
}

/**
 * 账单状态
 */
enum BillSateEnum {
  /**
   * 已支付
   */
  PAID = '已支付',
  /**
   * 待支付
   */
  WAIN_PAID = '待支付',
  /**
   * 已完成
   */
  DONE = '已完成',
  /**
   * 已取消
   */
  CANCELED = '已取消',
}

/**
 * 账单类型
 */
enum BillTypeEnum {
  /**
   * 房屋账单
   */
  HOUSE = '房屋账单',

  /**
   * 生活账单
   */
  LIFES = '生活账单',

  /**
   * 其他账单
   */
  OTHER = '其他账单',
}

/**
 * 用户状态
 */
enum UserStateEnum {
  DISABLE = '已禁用',
  NORMAL = '正常',
}

/**
 * 投诉反馈类型
 */
enum ComplaintFeedbackTypeEnum {
  /**
   * 投诉
   */
  SUBMIT = '投诉',
  /**
   * 反馈
   */
  CANCEL = '反馈',
}

/**
 * 房屋状态
 */
enum HouseStateEnum {
  NOT_SOLD = '暂未销售',
  IDLE = '空闲中',
  OCCUPIED = '已入住',
}

/**
 * 配置类型
 */
enum SysConfigTypeEnum {
  /**
   * 用户协议
   */
  AGGREMENT = 'aggrement',
  /**
   *隐私政策
   */
  PRIVACY = 'privacy',
  /**
   *版本号
   */
  VERSION = 'version',
}

/**
 * 维修状态
 */
enum MaintenanceStateEnum {
  /**
   * 已提交
   */
  SUBMITTED = '已提交',
  /**
   * 受理中
   */
  ACCEPT = '受理中',
  /**
   * 已完成
   */
  DONE = '已完成',
  /**
   * 已取消
   */
  CANCELED = '已取消',
}

/**
 * 合同状态
 */
enum ContractStateEnum {
  /**
   * 有效合同
   */
  VALID = '有效',
  /**
   *无效合同
   */
  INVALID = '无效',
  /**
   *未确认
   */
  NOT_SIGNED = '未确认',
}

/**
 * 订单状态
 */
enum OrdersStateEnum {
  /**
   * 待付款
   */
  WARN_PAY = '待付款',
  /**
   * 已付款
   */
  HAVE_PAY = '已付款',
  /**
   * 处理中
   */
  DISPOSE = '处理中',
  /**
   * 已取消
   */
  CANCEL = '已取消',
  /**
   * 已完成
   */
  FINISH = '已完成',
  /**
   * 已提交
   */
  SUBMITTED = '已提交',
}

/**
 * 订单类型
 */
enum OrdersTypeEnum {
  /**
   * 商品订单
   */
  ORDERS_GOODS = '商品订单',

  /**
   * 维修订单
   */
  ORDERS_MAINTENANCE = '维修订单',

  /**
   * 其他订单
   */
  ORDERS_OTHERS = '其他订单',
}

/**
 * 卡卷状态
 */
enum CardRollsStateEnum {
  /**
   * 未使用
   */
  UNUSER = '未使用',
  /**
   * 已使用
   */
  USED = '已使用',
  /**
   * 已失效
   */
  EXPIRED = '已失效',
}

/**
 * 卡卷类型
 */
enum CardRollsTypeEnum {
  /**
   * 未使用
   */
  FULL_MINUS = '满减卷',
  /**
   * 已使用
   */
  VOUCHER = '代金券',
}

/**
 * 支付方式
 */
enum PaymentMethodsEnum {
  /**
   * 微信支付
   */
  WEI_XIN = '微信支付',

  /**
   * 手机支付
   */
  OTHER = '其他支付',
}

/**
 * 状态枚举值的映射
 */
const statusCodeToEnumMap: {
  [key: number]: SateEnum
} = {
  101: PaymentMethodsEnum.WEI_XIN,
  102: PaymentMethodsEnum.OTHER,
  1001: UserStateEnum.DISABLE,
  1002: UserStateEnum.NORMAL,
  2001: OrdersStateEnum.WARN_PAY,
  2002: OrdersStateEnum.HAVE_PAY,
  2003: OrdersStateEnum.CANCEL,
  2004: OrdersStateEnum.FINISH,
  2005: OrdersStateEnum.SUBMITTED,
  2006: OrdersStateEnum.DISPOSE,
  3001: HouseStateEnum.NOT_SOLD,
  3002: HouseStateEnum.IDLE,
  3003: HouseStateEnum.OCCUPIED,
  4001: ActivitySateEnum.DIDNT_START,
  4002: ActivitySateEnum.CARRY_OUT,
  4003: ActivitySateEnum.ENDED,
  5001: MaintenanceStateEnum.SUBMITTED,
  5002: MaintenanceStateEnum.CANCELED,
  5003: MaintenanceStateEnum.DONE,
  5004: MaintenanceStateEnum.ACCEPT,
  6001: BillSateEnum.WAIN_PAID,
  6002: BillSateEnum.PAID,
  6003: BillSateEnum.CANCELED,
  6004: BillSateEnum.DONE,
  7001: ContractStateEnum.VALID,
  7002: ContractStateEnum.INVALID,
  7003: ContractStateEnum.NOT_SIGNED,
  8001: BookingStateEnum.SUBMIT,
  8002: BookingStateEnum.FINISH,
  8003: BookingStateEnum.ACCEPT,
  8004: BookingStateEnum.FAIL,
  8005: BookingStateEnum.CANCEL,
  10001: CardRollsStateEnum.UNUSER,
  10002: CardRollsStateEnum.USED,
  9003: CardRollsStateEnum.EXPIRED,
  20001: CardRollsTypeEnum.FULL_MINUS,
  20002: CardRollsTypeEnum.VOUCHER,
  
}

/**
 * 获取枚举状态
 * @param code 状态码
 * @returns 枚举状态值
 */
const getEnumValue = (code: number = 0): string => {
  return statusCodeToEnumMap[code] || null
}

/**
 * 判断枚举值是否相等
 * @param code 状态码
 * @param enums 枚举状态
 * @returns 是否相等
 */
const checkStateEnum = (code: number, enums: SateEnum): boolean => {
  return getEnumValue(code) == enums
}

export {
  checkStateEnum,
  getEnumValue,
  SysConfigTypeEnum,
  ActivitySateEnum,
  UserStateEnum,
  HouseStateEnum,
  MaintenanceStateEnum,
  OrdersStateEnum,
  OrdersTypeEnum,
  BillSateEnum,
  ContractStateEnum,
  BillTypeEnum,
  CommonSateEnum,
  ContractConfirmTypeEnum,
  BookingStateEnum,
  CardRollsStateEnum,
  ComplaintFeedbackTypeEnum,
  CardRollsTypeEnum
}
